package sort;

public class Sort {
    public static void main(String[] args) {
        int[] arr = new int[]{8, 9, 6, 5};
//        MaoPao(arr);
        XuanZe(arr);
    }

    public static void print(String name, int[] arr){
        System.out.print(name + "：");
        for (int data: arr){
            System.out.print(data + " ");
        }
        System.out.println();
    }

    /**
     * 冒泡排序
     * a、冒泡排序，是通过每一次遍历获取最大/最小值
     *
     * b、将最大值/最小值放在剩余序列尾部/头部
     *
     * c、然后除开最大值/最小值，剩下的数据在进行遍历获取最大/最小值
     *
     * 算法复杂度：O(n^2)
     */
    public static void MaoPao(int[] arr){
        if (arr == null || arr.length <= 0){
            return;
        }
        int temp;
        for (int i = 0; i < arr.length - 1; i++){
            for (int j = i + 1; j < arr.length; j++){
                if (arr[i] > arr[j]){
                    temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;

                    print("冒泡排序", arr);
                    System.out.println();
                }
            }
        }

        print("冒泡排序", arr);
        System.out.println();
        System.out.println();
    }

    /*
    *选择排序
    * 选择排序是从已有的序列里面找到最小值或者最大值
    * 然后和序列初始位置置换位置
    *
    * 算法复杂度：O(n^2)
     */
    public static void XuanZe(int[] arr){
        int temp;
        for (int i = 0; i < arr.length - 1; i++){
            int min = arr[i];
            int index = i;
            for (int j = i + 1; j < arr.length; j++){
                if (min > arr[j]){
                    index = j;
                    min = arr[j];
                }
            }

            temp = arr[index];
            arr[index] = arr[i];
            arr[i] = temp;

            print("选择排序", arr);
        }

        print("选择排序", arr);
        System.out.println();
        System.out.println();
    }

    /**
     * 插入排序
     * 插入排序是将一个未经排序的数据插入到一个已经排序的集合里面去
     * @param arr
     */
    public static void ChaRu(int[] arr){

    }

    /**
     * 希尔排序
     * @param arr
     */
    public static void XiEr(int[] arr){

    }
}
